#include "stm32f1xx_hal.h"
#include "bsp_mpu6050_iic.h"

#include "bsp_usart.h"

extern  void for_delay_us(uint32_t nus);
/*引脚初始化*/
void MPU6050_I2C_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    // 1. 使能时钟
    __HAL_RCC_GPIOB_CLK_ENABLE(); // I2C1的SCL(PB6)、SDA(PB7)在GPIOB
    GPIO_InitStruct.Pin = MPU6050_CLK_PIN | MPU6050_SDA_PIN; // PB6=SCL, PB7=SDA
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;        // 开漏输出
    GPIO_InitStruct.Pull = GPIO_NOPULL;            //
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  // 高速模式
    HAL_GPIO_Init(MPU6050_CLK_SDA_GPIO_PORT, &GPIO_InitStruct);
    
    MPU6050_W_SCL(1);
    MPU6050_W_SDA(1);
    
  
}


/**
  * @brief  I2C开始
  * @param  无
  * @retval 无
  */
void MPU6050_I2C_Start(void)
{
    MPU6050_W_SDA(1);
    MPU6050_W_SCL(1);
    for_delay_us(2);
    MPU6050_W_SDA(0);
    for_delay_us(2);
    MPU6050_W_SCL(0);
    for_delay_us(2);
}


/**
  * @brief  I2C停止
  * @param  无
  * @retval 无
  */
void MPU6050_I2C_Stop(void)
{

    MPU6050_W_SDA(0);
    for_delay_us(2);
    MPU6050_W_SCL(1);
    for_delay_us(2);
    MPU6050_W_SDA(1);
}

/**
  * @brief  I2C发送一个字节
  * @param  Byte 要发送的一个字节
  * @retval 无
  */
void MPU6050_I2C_SendByte(uint8_t Byte)
{
   uint8_t i;
	for (i = 0; i < 8; i++)
	{
		MPU6050_W_SDA(Byte & (0x80 >> i));
		MPU6050_W_SCL(1);
		MPU6050_W_SCL(0);
	}
	MPU6050_W_SDA(1);  
    for_delay_us(2);
	MPU6050_W_SCL(1); 
    for_delay_us(2);
	MPU6050_W_SCL(0);
    


}
